import Vue from 'vue'
import Vuex from 'vuex'
//导入axios
import axios from 'axios'

Vue.use(Vuex)

export default new Vuex.Store({
  //state存放所有的数据
  state: {
    //所有的数据列表
    //list.json 中的数据发生变化list数组也跟着变化
    list:[],
    //输入文本框的内容
    inputValue:'ttt',
    //新增项的下一个id
    nextId:5,
    //标记点击的按钮
    viewkey:'all'
  },
  //在mutations里修改数据
  mutations: {
    //渲染数据的函数 将获取到的后台数据赋值给list
    initList(state,list) {
      state.list = list
    },
    //定义一个函数修改state.inputValue 的值
    setInputValue(state,value) {
      state.inputValue = value
    },
    //添加列表项的函数
    addItem(state) {
      const obj = {
        id:state.nextId,
        info:state.inputValue.trim(),
        //done表示item的状态 false表示没有选中
        done:false
      }
      state.list.push(obj)
      //让id自增
      state.nextId++
      state.inputValue = ''
    },
    //根据id删除对应的任务事项
    removeItem(state,id) {
      //1.根据id查找对应项的索引  没有匹配到侧返回-1
      //箭头函数执行语句只有一句时省略{}
      const index = state.list.findIndex(item => item.id === id)
      console.log(index);
      //2.根据索引删除对应的元素 
      // if (index !== -1) {
      //   state.list.splice(index,1)
      // }

      if (index < 0) return
      state.list.splice(index,1)
    },
    //改变列表项的选中状态
    changeStatus(state,param) {
      //1.得到对应项的索引
      const index = state.list.findIndex(item => item.id === param.id)
      //2.根据索引改变对应项的done
      state.list[index].done = param.status
    },
    //清除已完成项的函数
    clearDone(state) {
      //将过滤后的数据从新赋值给list
      state.list = state.list.filter(item => item.done === false)
    },
    //修改视图的关键字
    changeViewkey(state,key) {
      state.viewkey = key
    }
  },
  actions: {
    //通过axios发起异步请求获取list数据
    getList(context) {
      axios.get('/list.json').then(({data:res}) => {
        // console.log(res);
        //context 代表当前store实例对象
        context.commit('initList',res)
      })
    }
  },
  //getter 不修改数据只是对数据加工处理
  getters: {
    //统计未完成任务的条数
    unDoneLength(state) {
      //filter 过滤数组的方法返回的是一个新数组,新数组存放的是所有满足filter过滤条件的元素
      return state.list.filter(item => item.done === false).length
    },
    //根据条件返回不同的list
    infoList(state) {
      //全部的
      if (state.viewkey === 'all') {
        return state.list
      }
      //未完成的 done为false
      if (state.viewkey === 'undone') {
        return state.list.filter(item => !item.done)
      }
      if (state.viewkey === 'done') {
        return state.list.filter(item => item.done)
      }
      //三个按钮都没点 返回原来的数据
      return state.list
    }
  },
  modules: {
  }
})
